package es.ojugames.yincana.creacion;

import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import es.ojugames.yincana.CheckLocationServiceActivity;
import es.ojugames.yincana.R;
import es.ojugames.yincana.bd.YincanaProvider;

//Formulario primero del modulo de creacion de rutas manualmente
public class CreateRouteActivity extends Activity {
	private EditText nombre;
	private EditText descripcion;
	private Spinner categoria;
	private Spinner comunidad;
	private Spinner provincia;
	private Spinner localidad;
	
	private Long categoriaID;
	private Long localidadID;
	
	private LocationManager locManager;
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		
		locManager = (LocationManager)getSystemService(LOCATION_SERVICE);
		
		setContentView(R.layout.create_route_layout);
		
		//Recuperamos los elementos de la interfaz que vamos a necesitar
		nombre = (EditText) this.findViewById(R.id.nombreRutaForm);
		descripcion = (EditText) this.findViewById(R.id.descripcionRutaForm);
		categoria = (Spinner) this.findViewById(R.id.categoriaRutaSpinner);
		comunidad = (Spinner) this.findViewById(R.id.comunidadSpinner);
		provincia = (Spinner) this.findViewById(R.id.provinciaSpinner);
		localidad = (Spinner) this.findViewById(R.id.localidadRutaSpinner);
		
		//Cargamos los datos para el Spinner de Categorias
		String[] camposDbCategorias = { "nombre", BaseColumns._ID  };
		Uri uriCategorias = Uri.parse("content://es.ojugames.yincana/categorias");
		Cursor cursorCategorias = getContentResolver().query(uriCategorias, null, null, null, null);
		int[] camposViewCategorias = new int[] { R.id.nombre };
		SimpleCursorAdapter adapterCategorias = new SimpleCursorAdapter(CreateRouteActivity.this,
				R.layout.simple_spinner_item, cursorCategorias, camposDbCategorias,
				camposViewCategorias);
		categoria.setAdapter(adapterCategorias);
		
		//Cuando seleccionamos una opcion recuperamos su id y lo almacenamos
		categoria.setOnItemSelectedListener(
		        new AdapterView.OnItemSelectedListener() {
		        public void onItemSelected(AdapterView<?> parent,
		            android.view.View v, int position, long id) {
		        	categoriaID = id;
		        }
		 
		        public void onNothingSelected(AdapterView<?> parent) {
		        }
		});
		
		//Cargamos los datos para el Spinner de Comunidades
		String[] camposDbComunidades = { "nombre", BaseColumns._ID  };
		Uri uriComunidades = Uri.parse("content://es.ojugames.yincana/comunidades");
		Cursor cursorComunidades = getContentResolver().query(uriComunidades, null, null, null, null);
		int[] camposViewComunidades = new int[] { R.id.nombre };
		SimpleCursorAdapter adapterComunidades = new SimpleCursorAdapter(CreateRouteActivity.this,
				R.layout.simple_spinner_item, cursorComunidades, camposDbComunidades,
				camposViewComunidades);
		comunidad.setAdapter(adapterComunidades);
		
		//Cuando seleccionamos una comunidad filtramos las provincias que nos apareceran en el siguiente spinner
		comunidad.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
		        public void onItemSelected(AdapterView<?> parent,
		            //Cargamos el adapter correspondiente
		        	android.view.View v, int position, long id) {
					String[] camposDbProvincias = { "nombre", BaseColumns._ID  };
					Uri uriProvincias = Uri.parse("content://es.ojugames.yincana/provincias");
					Long idComunidades = new Long(id);
					Cursor cursorProvincias = getContentResolver().query(uriProvincias, null, "idComunidades = ?", new String[] {idComunidades.toString()}, null);
		    		int[] camposViewProvincias = new int[] { R.id.nombre };
		    		SimpleCursorAdapter adapterProvincias = new SimpleCursorAdapter(CreateRouteActivity.this,
							R.layout.simple_spinner_item, cursorProvincias, camposDbProvincias,
							camposViewProvincias);
		    		provincia.setAdapter(adapterProvincias);
		        }
		 
		        public void onNothingSelected(AdapterView<?> parent) {
		        }
		});
		
		//Cuando seleccionamos una provincia filtramos las localidades que nos apareceran en el siguiente spinner
		provincia.setOnItemSelectedListener(
		        new AdapterView.OnItemSelectedListener() {
		        public void onItemSelected(AdapterView<?> parent,
		            android.view.View v, int position, long id) {
		        	//Cargamos el adapter correspondiente
		        	String[] camposDbLocalidades = { "nombre", BaseColumns._ID  };
		    		Uri uriLocalidades = Uri.parse("content://es.ojugames.yincana/localidades");
		    		Long idProvincia = new Long(id);
		    		Cursor cursorLocalidades = getContentResolver().query(uriLocalidades, null, "idProvincias = ?", new String[] {idProvincia.toString()}, null);
		    		int[] camposViewLocalidades = new int[] { R.id.nombre };
		    		SimpleCursorAdapter adapterLocalidades = new SimpleCursorAdapter(CreateRouteActivity.this,
		    				R.layout.simple_spinner_item, cursorLocalidades, camposDbLocalidades,
		    				camposViewLocalidades);
		    		localidad.setAdapter(adapterLocalidades);
		        }
		 
		        public void onNothingSelected(AdapterView<?> parent) {
		        }
		});
		
		//Cuando seleccionamos una opcion recuperamos su id y lo almacenamos
		localidad.setOnItemSelectedListener(
		        new AdapterView.OnItemSelectedListener() {
		        public void onItemSelected(AdapterView<?> parent,
		            android.view.View v, int position, long id) {
		        	localidadID = id;
		        }
		 
		        public void onNothingSelected(AdapterView<?> parent) {
		        }
		});
		
	}
	
	@Override
	public void onResume(){
		super.onResume();
		
		if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
		{
			Intent intent = new Intent(CreateRouteActivity.this, CheckLocationServiceActivity.class);
	    	startActivity(intent);
		}
	}
	
	//Metodo que se ejecuta antes de pasar a la siguiente pantalla
	public void goAnyadirPuntos(View v) {
		//Obtenemos las cadenas de texto de los campos del formulario
		String nombreText = nombre.getText().toString();
		String descripcionText = descripcion.getText().toString();

		//Validamos que todos los campos obligatorios estan rellenos
		if((!nombreText.equals("")) && (!descripcionText.equals("")) && (categoriaID!=null) && (localidadID!=null)){
			//Preparamos el registro a insertar
			ContentValues values = new ContentValues();
			values.put("nombre", nombreText);
			values.put("descripcionRuta", descripcionText);
			values.put("idCategorias", categoriaID);
			values.put("idLocalidades", localidadID);
			
			//Insertamos el registro mendiante el proveedor de contenidos
			Uri res = getContentResolver().insert(YincanaProvider.RUTAS_URI, values);
			
			//Recuperamos el id del registro insertado
			Long idRuta = ContentUris.parseId(res);
			
			//Pasamos a la siguiente activity y le mandamos el id de la ruta creada
			Intent intent = new Intent(CreateRouteActivity.this, CreatePuntoActivity.class);
			intent.putExtra("idRuta", idRuta);
			startActivity(intent);
		} else {
			//Aviso de que hay que rellenar todos los campos
			Toast toast = Toast.makeText(CreateRouteActivity.this, R.string.formularioBlanco, Toast.LENGTH_LONG);
			toast.setGravity(Gravity.CENTER, 0, 0);
			toast.show();
		}
	}


}
